//
// Description: 3302. 表达式求值
// Created by Loading on 2022/7/16.
//

#include <bits/stdc++.h>

using namespace std;

// 运算数
stack<int> nums;
// 运算符
stack<char> op;

// 运算
void eval() {
    int b = nums.top(); nums.pop();
    int a = nums.top(); nums.pop();
    char c = op.top(); op.pop();
    int x;
    if (c == '+') {
        x = a + b;
    } else if (c == '-') {
        x = a - b;
    } else if (c == '*') {
        x = a * b;
    } else {
        x = a / b;
    }
    nums.emplace(x);
}

int main() {
    // 运算符优先级
    unordered_map<char, int> pr{{'+', 1},
                                {'-', 1},
                                {'*', 2},
                                {'/', 2}};
    string s;
    cin >> s;
    for (int i = 0; i < s.size(); ++i) {
        auto c = s[i];
        if (isdigit(c)) {
            // 将数字组合，压栈nums
            int x = 0, j = i;
            while (j < s.size() && isdigit(s[j])) {
                x = x * 10 + s[j++] - '0';
            }
            nums.emplace(x);
            i = j - 1;
        } else if (c == '(') {
            // 左括号，直接压栈op
            op.emplace(c);
        } else if (c == ')') {
            // 右括号，开始运算，直到op栈顶变为左括号
            while (op.top() != '(') {
                eval();
            }
            op.pop();
        } else {
            // 一般运算符，根据优先级运算
            while (!op.empty() && pr[op.top()] >= pr[c]) {
                eval();
            }
            op.emplace(c);
        }
    }
    // 将未运算的计算完毕
    while (!op.empty()) {
        eval();
    }
    cout << nums.top() << endl;

    return 0;
}
